package com.daniel.juc.lock8;

import java.util.concurrent.TimeUnit;

/**
 * 8锁，关于锁的8个问题
 * 5、增加两个静态的同步方法，只有一个对象，先打印发短信还是打电话？发短信
 * 6、两个对象，增加两个静态的同步方法，先打印发短信还是打电话？发短信
 *
 * @author Daniel
 * @version V1.0
 * @date 2020/5/18 15:00
 */
public class Test03 {


	public static void main(String[] args) {
		// 两个对象的Class类模板只有一个，static，锁的是Class

		Phone3 phone1 = new Phone3();
		Phone3 phone2 = new Phone3();
		new Thread(() -> {
			Phone3.send();
		}, "A").start();

		try {
			TimeUnit.SECONDS.sleep(1);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}

		new Thread(() -> {
			Phone3.call();
		}, "B").start();
	}
}

// Phone3惟一的一个Class对现象

class Phone3 {

	// synchronized 锁的对象是方法的调用者
	// static静态方法
	// 类一加载就有了，锁的是class

	public static synchronized void send() {
		// 增加休眠4秒
		try {
			TimeUnit.SECONDS.sleep(4);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}

		System.out.println("发短信");
	}

	public static synchronized void call() {
		System.out.println("打电话");
	}

}
